Fix pending ack handling for buffer overflow drops #81
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
introduced in 4.0.0 (the pending-ack compaction feature), when there are a few requests sent inflight, AND the replayq buffer overflows, the overflown calls to be dropped are in the middle of the compacted call-id range, hence caused below assertion failure:
{cause => unexpected_id,max => 1728471879846415,min => 1728471879846415,got => 1728471879846430},[{wolff_pendack,take2,4,[{file,"wolff_pendack.erl"},{line,122}]},{wolff_pendack,take,2,[{f
ile,"wolff_pendack.erl"},{line,92}]},{wolff_producer,evaluate_pending_ack_funs,3,[{file,"wolff_producer.erl"},{line,755}]},{wolff_producer,handle_overflow,2,[{file,"wolff_producer.erl"},{line,957}]}
The fix is to keep two queues for pending acks instead, one for the backlog (replayq buffer), another for inflight.